package dao.xml;

import dao.IEmpregadoDAO;
import data.Empregado;
import java.beans.XMLDecoder;
import java.beans.XMLEncoder;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.HashMap;
import java.util.Map;
import util.Const;

public class EmpregadoXmlDAO extends GenericsXmlDAO implements IEmpregadoDAO
{
	private String filePath = Const.getString("FILE_PATH");
	
	@Override
	public void inserirEmpregado( Empregado empregado ) throws FileNotFoundException
	{
		Map< String, Empregado > empregados = lerEmpregados();
		empregados.put(empregado.getCpf(), empregado);
		gravarEmpregados( empregados );
	}

	@Override
	public void excluirEmpregado(String cpf) throws FileNotFoundException
	{
		Map< String, Empregado > empregados = lerEmpregados();
		empregados.remove( cpf );
		gravarEmpregados( empregados );
	}
	
	@Override
	public Map< String, Empregado > lerEmpregados() throws FileNotFoundException 
	{
		Map< String, Empregado > empregados = new HashMap<>();
		XMLDecoder xmlDecoder = null;

		try {
			File file = new File(filePath);
			
			if( file.exists() ) {
				xmlDecoder = new XMLDecoder(new FileInputStream(file));
				empregados = (HashMap< String, Empregado >)xmlDecoder.readObject();
			}
			return empregados;
		}
		finally {
			fecharConexao(xmlDecoder);
		}
	}

	@Override
	public Empregado getEmpregado( String cpf ) throws FileNotFoundException 
	{
		Map< String, Empregado > empregados = lerEmpregados();
		return empregados.get( cpf );
	}

	public boolean deleteXml()
	{
		try {
			new File(filePath).delete();
			return true;
		}
		catch( Exception ex ) {
			return false;
		}		
	}
	
	public void setFilePath(String filePath) {
		this.filePath = filePath;
	}
	
	//-------------------------------------------------------------------------
	// métodos private
	//-------------------------------------------------------------------------	
	private void gravarEmpregados( Map< String, Empregado > empregados ) throws FileNotFoundException 
	{
		XMLEncoder xmlEncoder = null;
		try
		{
			xmlEncoder = getXmlEncoder(filePath);
			xmlEncoder.writeObject(empregados);
		} finally {
			fecharConexao(xmlEncoder);
		}
	}
}
